package com.fx.device.common.util;

import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;


@Slf4j
@Accessors(chain = true)
public class ReturnMessageUtils<T> {
    /**
     * 测试场景true，可以自动登录，false需要先调用登录接口在进行操作
     */
    public static final Boolean Test = true;

    //windows路径
    public static final String BPMN_PathMapping = "file:D:\\Download\\root\\device\\src\\main\\resources\\resources\\bpmn\\";

    /**
     * 判断是否成功
     *
     * @param returnMessage 返回数据
     * @return boolean
     */
    public static boolean isSuccess(ReturnMessage returnMessage) {
        return returnMessage.getCode().equals(ErrorEnum.E_SUCCESS.getErrorCode());
    }

    /**
     * @param t 对象T
     * @return ReturnMessage<T>
     */

    public static <T> ReturnMessage<T> success(T t) {
        return new ReturnMessage<>(ErrorEnum.E_SUCCESS.getErrorCode(), ErrorEnum.E_SUCCESS.getErrorMsg(), t);
    }

    /**
     * 无异常 请求成功并有具体内容返回
     *
     * @param msg 错误消息
     * @param t   对象T
     * @return ReturnMessage<T>
     */

    public static <T> ReturnMessage<T> success(String msg, T t) {
        return new ReturnMessage<>(ErrorEnum.E_SUCCESS.getErrorCode(), msg, t);
    }

    /**
     * 无异常 请求成功并无具体内容返回
     *
     * @return ReturnMessage<T>
     */
    public static <T> ReturnMessage<T> success() {
        return new ReturnMessage<>(ErrorEnum.E_SUCCESS.getErrorCode(), ErrorEnum.E_SUCCESS.getErrorMsg(), null);
    }

    /**
     * 有自定义错误异常信息
     *
     * @param code 错误码
     * @param msg  错误消息
     * @return ReturnMessage<T>
     */
    public static <T> ReturnMessage<T> error(Integer code, String msg) {

        return new ReturnMessage<>(code, msg, null);
    }

    /**
     * 有自定义错误异常信息
     *
     * @param code 错误码
     * @param msg  错误消息
     * @param t    实体类
     * @return ReturnMessage<T>
     */
    public static <T> ReturnMessage<T> error(Integer code, String msg, T t) {

        return new ReturnMessage<>(code, msg, t);
    }



    /**
     * 有自定义错误异常信息
     *
     * @param errorEnum 自定义错误枚举类
     * @return ReturnMessage<T>
     */
    public static <T> ReturnMessage<T> errorWithEum(ErrorEnum errorEnum) {
        return new ReturnMessage<>(errorEnum.getErrorCode(), errorEnum.getErrorMsg(), null);
    }

    /**
     * 自定义错误枚举类消息返回
     *
     * @param errorEnum 自定义错误枚举类
     * @param paramList 参数列表
     * @return ReturnMessage<T>
     */
    public static <T> ReturnMessage<T> errorWithEum(ErrorEnum errorEnum, ArrayList<Object> paramList) {
        String paramMsg = errorEnum.getErrorMsg();
        int i = 0;
        for (Object param : paramList) {
            paramMsg = paramMsg.replace("{" + i + "}", param.toString());
        }
        return new ReturnMessage<>(errorEnum.getErrorCode(), paramMsg, null);
    }

    /**
     * 异常消息的数据返回
     *
     * @param e 异常类
     * @return ReturnMessage<T>
     */
    public static <T> ReturnMessage<T> errorWithException(Exception e) {
        return new ReturnMessage<T>(ErrorEnum.E_SYSTEM_BUSY.getErrorCode(), ErrorEnum.E_SYSTEM_BUSY.getErrorMsg(), (T) e.getStackTrace());
    }
}